<?php
/**
 * 命令助手类
 * 
 * @version $Id: ICommandHelper.php 312 2008-04-23 16:29:38Z iwind $
 * @package net.4kiki.cli
 */
class ICommandHelper extends IObject {
	/**
	 * 添加参数
	 * 
	 * 可以一次性将很多参数的定义添加到命令对象中
	 *
	 * @param IAbstractCommand $command 命令对象
	 * @param array $parameters 参数集
	 */
	public static function addParameter(IAbstractCommand &$command, $parameters) {
		if (!is_array($parameters)) {
			return;
		}
		foreach ($parameters as $parameter) {
			if (isset($parameter["name"])) {
				$_parameter = new ICommandParameter($parameter["name"]);
				$command->addParameter($_parameter);
				if (isset($parameter["optional"])) {
					$_parameter->setOptional($parameter["optional"]);
				}
				if (isset($parameter["description"])) {
					$_parameter->setDescription($parameter["description"]);
				}
				if (isset($parameter["options"]) && is_array($parameter["options"])) {
					foreach ($parameter["options"] as $option) {
						if (isset($option["name"])) {
							$_option = new ICommandOption($option["name"]);
							$_parameter->addOption($_option);
							if (isset($option["optional"])) {
								$_option->setOptional($option["optional"]);
							}
							if (isset($option["description"])) {
								$_option->setDescription($option["description"]);
							}
						}
					}
				}
			}
		}
	}
	
	/**
	 * 判断命令中参数和选项是否被设定
	 *
	 * @param IAbstractCommand $command 命令对象
	 * @param string $parameterName 参数名
	 * @param string $optionName 选项名
	 * @return boolean
	 */
	public static function isDefined(IAbstractCommand $command, $parameterName, $optionName) {
		$parameter = $command->getParameter($parameterName);
		if ($parameter != null) {
			$options = $parameter->getOptions();
			$option = $parameter->getOption($optionName);
			if ($option != null) {
				return $option->isDefined();
			}
		}
		return false;
	}
}

?>